package com.atguigu.demo02.controller;

import com.atguigu.demo02.bean.Stu;
import com.atguigu.demo02.service.StuService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

//@Controller // 可以响应转发或者重定向视图  如果需要将响应结果转为json响应需要结合@ResponseBody
// 大后端： 来自于小程序、app、pc端、h5 请求可以访问一个后端
//          每个前端都有自己的ui框架 不需要项目返回视图，只需要后端返回json字符串，前端自己渲染
//        以后后端基本都是rest风格：http+json  报文使用http协议的结构  数据传输一般使用json格式
@RestController //@Controller+@ResponseBody
@RequestMapping("/stu")
public class TestController {
    @Resource
    StuService stuService;
    //1、请求参数  url?name=xx&age=11&id=11
    @GetMapping("/test1")
    public String test1(@RequestParam("name") String stuName,
                        Integer age ,
                        Long id){
        System.out.println(stuName+" , "+ age+" , "+ id);
        stuService.test1(stuName);
        return "test1";
    }
    // pojo入参：不能加注解
    @GetMapping("/test2")
    public String test2(Stu stu){
        System.out.println(stu.getName()+" , "+ stu.getAge()+" , "+ stu.getId());
        return "test2";
    }
    //javabean和Map一样 都是存储多对k-v
    @GetMapping("/test3")
    public String test2(@RequestParam Map map){ // controller接口使用map不加注解，和ModelAndView一样(代表请求域)
        System.out.println(map.get("name")+" , "+ map.get("age")+" , "+ map.get("id"));
        return "test3";
    }
    //一个键映射多个值的请求参数: ids = 1,2,3,4,5      ids=1&ids=2&ids=3
    @GetMapping("/test4")
    public String test4(@RequestParam List<Long> ids){//使用集合接收请求参数时 必须加注解(springmvc默认需要初始化对象入参)
        System.out.println(ids);
        return "test4";
    }
    //2、路径参数
    @GetMapping("/test5/{id}/{name}")
    public String test5(@PathVariable("id")Long id , @PathVariable("name")String name){
        System.out.println(id+" , "+ name);
        return "test5";
    }
    //3、请求头
    @GetMapping("/test6")
    public String test6(@RequestHeader("host")String host){
        System.out.println(host);
        return "test6";
    }
    //4、请求体: 不能使用get方式
    // delete和put方式的请求都是 post+_method方式转换的
    @PostMapping("/test7")
    public String test7(@RequestBody Stu stu){
        System.out.println(stu);
        return "test7";
    }
}
